package cn.iocoder.yudao.module.ems.service.supplier;

import java.util.*;
import javax.validation.*;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.ems.controller.admin.supplier.vo.SupplierListReqVO;
import cn.iocoder.yudao.module.ems.controller.admin.supplier.vo.*;
import cn.iocoder.yudao.module.ems.dal.dataobject.supplier.SupplierDO;
import cn.iocoder.yudao.module.ems.dal.dataobject.supplier.SupplierDO;
import cn.iocoder.yudao.module.ems.dal.dataobject.supplier.SupplierDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 供应商 Service 接口
 *
 * @author 左达成
 */
public interface SupplierService {

    /**
     * 创建供应商
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSupplier(@Valid SupplierCreateReqVO createReqVO);

    /**
     * 更新供应商
     *
     * @param updateReqVO 更新信息
     */
    void updateSupplier(@Valid SupplierUpdateReqVO updateReqVO);

    /**
     * 删除供应商
     *
     * @param id 编号
     */
    void deleteSupplier(Long id);

    /**
     * 获得供应商
     *
     * @param id 编号
     * @return 供应商
     */
    SupplierDO getSupplier(Long id);

    /**
     * 获得供应商列表
     *
     * @param ids 编号
     * @return 供应商列表
     */
    List<SupplierDO> getSupplierList(Collection<Long> ids);

    /**
     * 获得供应商分页
     *
     * @param pageReqVO 分页查询
     * @return 供应商分页
     */
    PageResult<SupplierDO> getSupplierPage(SupplierPageReqVO pageReqVO);

    /**
     * 获得供应商列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 供应商列表
     */
    List<SupplierDO> getSupplierList(SupplierExportReqVO exportReqVO);
    
    /**
     * 筛选供应商列表
     *
     * @param reqVO 筛选条件请求 VO
     * @return 供应商列表
     */
    List<SupplierDO> getSimpleSuppliers(SupplierListReqVO reqVO);

    List<SupplierDO> getSimpleSuppliers(Collection<Long> ids);

    /**
     * 获得指定编号的供应商 Map
     *
     * @param ids 供应商编号数组
     * @return 供应商 Map
     */
    default Map<Long, SupplierDO> getSupplierMap(Collection<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return Collections.emptyMap();
        }
        List<SupplierDO> list = getSimpleSuppliers(ids);
        return CollectionUtils.convertMap(list, SupplierDO::getId);
    }

}
